#include "cp.hpp"
using namespace std;
// 生产者线程
void *product(void *args)
{
    BlockQueue<task_t> *q = static_cast<BlockQueue<task_t> *>(args);
    while (true)
    {
        cout << "生产了一个任务" << endl;
        q->Equeue(download);
        sleep(3);
    }
}
// 消费者线程
void *consumer(void *args)
{
    BlockQueue<task_t> *q = static_cast<BlockQueue<task_t> *>(args);
    while (true)
    {
        sleep(1);
        task_t t = q->Pop();
        cout << "执行了一个任务" << endl;
        t();
    }
}
int main()
{
    // 创建一个生产者线程和一个消费者线程
    BlockQueue<task_t> *q = new BlockQueue<task_t>(cap);
    // 构建生产和消费者
    pthread_t c[4], p[3];
    pthread_create(c, nullptr, consumer, q);
    pthread_create(c + 1, nullptr, consumer, q);
    pthread_create(c+2, nullptr, consumer, q);
    pthread_create(c+3, nullptr, consumer, q);
    pthread_create(p, nullptr, product, q);
    pthread_create(p + 1, nullptr, product, q);
    pthread_create(p + 2, nullptr, product, q);

    pthread_join(c[0], nullptr);
    pthread_join(c[1], nullptr);
    pthread_join(c[2], nullptr);
    pthread_join(c[3], nullptr);
    pthread_join(p[0], nullptr);
    pthread_join(p[1], nullptr);
    pthread_join(p[2], nullptr);

    return 0;
}